package main

import (
	"errors"
	"fmt"
)

// panic 可以在任何地方引发 但是recover 只有在defer调用的函数中有效
// func fn1(){
// 	fmt.Println("fn1")

// }
// 模拟一个读取文件的方法
// error作为返回类型
func readFile(filename string) error{
	if filename == "main.go"{
				return nil
	}else{
		return  errors.New("读取文件失败")
	}

}
	func myFn(){
		defer func ()  {
			e :=recover()
			if e !=nil {
				fmt.Println("给管理员发送邮件")
			}
		}()
		err :=readFile(("xxx.go"))
		// err :=readFile("main.go")
		if err !=nil{
			panic(err)
		}
	}
// func fn2(a,b int) int {
// 	// 想要程序继续执行使用recover
// 	// defer func ()  {
// 	// 	err :=recover()
// 	// 	if err!=nil{
// 	// 		fmt.Println("err:",err)
// 	// 	}
// 	// }()
// 	// panic("抛出一个异常")
// 	// defer func(){
// 	// 	err :=recover()
// 	// 	if err !=nil{
// 	// 		fmt.Println("error",err)  //抛出一个异常以后程序继续向下执行
// 	// 	}
// 	// }()
// 	// return a/b  
// 	// 抛出panic异常
// }
func main(){
	// fmt.Println(fn2(10,0))
	// fmt.Println("结束")
	// fmt.Println(fn2(10,2))
	myFn()
	fmt.Println("继续执行")
}